#ifndef CASH_MANAGER_H
#define CASH_MANAGER_H

#include <memory>
#include <vector>

#include "common/elements/element_container.hpp"

#include "common/elements/edge.h"
#include "common/elements/field_type.h"
#include "common/elements/item_type.h"
#include "common/elements/role.h"
#include "common/elements/role_menu_item.h"
#include "common/elements/rule.h"
#include "common/elements/rule_item_type.h"
#include "common/elements/rule_project.h"
#include "common/elements/rule_state.h"
#include "common/elements/state.h"
#include "common/elements/team.h"
#include "common/elements/user.h"
#include "common/elements/user_team_role.h"
#include "common/elements/workflow.h"

// TODO: Предполагается, что кешироваться будут следующие элементы:
// #include "common/elements/project_team.h"
// #include "common/elements/field_type_possible_value.h"
// #include "common/elements/link_type.h"
// #include "common/elements/standard_day.h"
// #include "common/elements/special_day.h"

struct CashManager final
{
public:
    Elements::ElementContainer<Elements::Edge> edges;
    Elements::ElementContainer<Elements::FieldType> fieldTypes;
    Elements::ElementContainer<Elements::ItemType> itemTypes;
    Elements::ElementContainer<Elements::Role> roles;
    Elements::ElementContainer<Elements::RoleMenuItem> roleMenuItems;
    Elements::ElementContainer<Elements::Rule> rules;
    Elements::ElementContainer<Elements::RuleItemType> ruleItemTypes;
    Elements::ElementContainer<Elements::RuleProject> ruleProjects;
    Elements::ElementContainer<Elements::RuleState> ruleStates;
    Elements::ElementContainer<Elements::State> states;
    Elements::ElementContainer<Elements::Team> teams;
    Elements::ElementContainer<Elements::User> users;
    Elements::ElementContainer<Elements::UserTeamRole> userTeamRoles;
    Elements::ElementContainer<Elements::Workflow> workflows;
};

#endif // CASH_MANAGER_H
